package com.dream.file;

import com.dream.file.chunk.ChunkUploadResult;

import java.io.InputStream;

public interface FileStorage {

    /**
     * 上传文件
     * @param inputStream 文件输入流
     * @param path 存储路径
     * @param fileName 文件名
     * @return 文件的访问URL
     */
    String upload(InputStream inputStream, String path, String fileName);

    /**
     * 分片上传文件
     * @param inputStream 文件输入流
     * @param path 存储路径
     * @param fileName 文件名
     * @param chunkNumber 分片序号
     * @param totalChunks 总分片数
     * @return 分片上传状态
     */
    ChunkUploadResult uploadChunk(InputStream inputStream, String path,
                                  String fileName, int chunkNumber, int totalChunks);

    /**
     * 下载文件
     * @param path 文件路径
     * @param fileName 文件名
     * @return 文件输入流
     */
    InputStream download(String path, String fileName);

    /**
     * 断点续传下载
     * @param path 文件路径
     * @param fileName 文件名
     * @param start 开始位置
     * @param end 结束位置
     * @return 文件部分内容的输入流
     */
    InputStream downloadRange(String path, String fileName, long start, long end);

    /**
     * 删除文件
     * @param path 文件路径
     * @param fileName 文件名
     * @return 是否删除成功
     */
    boolean delete(String path, String fileName);

    /**
     * 获取文件元信息
     * @param path 文件路径
     * @param fileName 文件名
     * @return 文件元信息
     */
    FileMetadata getMetadata(String path, String fileName);
}
